﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Persistencia_y_capa_de_negocio
{
    /// <summary>
    /// Clase ENUsuario. Representa un objeto u entidad de negocio que contiene un usuario.
    /// </summary>
    [Serializable]
    public class ENUsuario
    {
        /// <summary>
        /// Identifica al usuario
        /// </summary>
        private int idcuenta;
        /// <summary>
        /// Nombre del usuario
        /// </summary>
        private string nombreUsuario;
        /// <summary>
        /// Password del usuario
        /// </summary>
        private string password;
        /// <summary>
        /// E-mail del usuario
        /// </summary>
        private string email;
        /// <summary>
        /// Fecha de registro del usuario
        /// </summary>
        private DateTime fechareg;
        /// <summary>
        /// Coordenada x del cuadrante
        /// </summary>
        private int xcuad;
        /// <summary>
        /// Coordenada y del cuadrante
        /// </summary>
        private int ycuad;
        /// <summary>
        /// Coordenada x de la base
        /// </summary>
        private int xbase;
        /// <summary>
        /// Coordenada y de la base
        /// </summary>
        private int ybase;
        /// <summary>
        /// Nombre del planeta del usuario
        /// </summary>
        private string nombreplaneta;

        /// <summary>
        /// Identifica al usuario
        /// </summary>
        public int IDUsuario
        {
            get { return idcuenta; }
            set { idcuenta = value; }
        }
        /// <summary>
        /// Nombre del usuario
        /// </summary>
        public string NombreUsuario
        {
            get { return nombreUsuario; }
            set { nombreUsuario = value;}
        }

        /// <summary>
        /// Password del usuario
        /// </summary>
        public string PassUsuario
        {
            get { return password; }
            set { password = value; }
        }

        /// <summary>
        /// E-mail del usuario
        /// </summary>
        public string EmailUsuario
        {
            get { return email; }
            set { email = value; }
        }
        /// <summary>
        /// Fecha de registro del usuario
        /// </summary>
        public DateTime FechaRegUsuario
        {
            get { return fechareg; }
            set { fechareg = value; }
        }
        /// <summary>
        /// Coordenada x del cuadrante
        /// </summary>
        public int CXCuadranteUsuario
        {
            get { return xcuad; }
            set { xcuad = value; }
        }
        /// <summary>
        /// Coordenada y del cuadrante
        /// </summary>
        public int CYCuadranteUsuario
        {
            get { return ycuad; }
            set { ycuad = value; }
        }
        /// <summary>
        /// Coordenada x de la base
        /// </summary>
        public int CXBaseUsuario
        {
            get { return xbase; }
            set { xbase = value; }
        }
        /// <summary>
        /// Coordenada y de la base
        /// </summary>
        public int CYBaseUsuario
        {
            get { return ybase; }
            set { ybase = value; }
        }

        public string NombrePlaneta
        {
            get { return nombreplaneta!=""?nombreplaneta:"Desconocido"; }
            set { nombreplaneta = value; }
        }

        public int CalcularPoder
        {
            get
            {
                int poder = 0;

                foreach (ENRecursoUsuario re in CADRecursoUsuario.Instancia.getRecursosUsuario(idcuenta))
                {
                    poder += (int)re.CantidadRes;
                }

                foreach (ENUnidadesUsuario un in CADUnidadesUsuario.Instancia.obtenerUnidadesUsuario(idcuenta))
                {
                    poder += 10 * un.Cantidad;
                }

                foreach (EnEdificioUsuario ed in CADEdificioUsuario.Instancia.obtenerEdificiosUsuario(idcuenta))
                {
                    poder += 100 * ed.NivelEd;
                }

                return poder;
            }
        }
    }
}
